<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xml:lang="en" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Task: Implement Solution</title>
<meta name="uma.type" content="TaskDescriptor">
<meta name="uma.name" content="implement_solution">
<meta name="uma.presentationName" content="Implement Solution">
<meta name="uma.guid" content="_hVe-oNOKEdyqlogshP8l4g">
<meta name="element_type" content="TaskDescriptor">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../css/default.css" type="text/css">
<script src="./../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ActivityTreeTable.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ProcessElementPage.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/processElementData.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var defaultQueryStr = '?proc=_RXGoodOFEdyqlogshP8l4g&path=_RXGoodOFEdyqlogshP8l4g,_hVe-oNOKEdyqlogshP8l4g';
					var backPath = './../../';
					var imgPath = './../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo, defaultQueryStr, true, true, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top">
<div id="page-guid" value="_hVe-oNOKEdyqlogshP8l4g"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Task: Implement Solution</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../images/taskdes_lg_dgm32.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">Implement source code to provide new functionality or fix defects.</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Purpose</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    The purpose of this task is to produce an implementation for part of the solution (such as a class or component), or to
    fix one or more defects. The result is typically new or modified source code, which is&nbsp;referred to the
    implementation.
</p></td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Roles</th><td class="sectionTableCell" width="30%"><span class="sectionTableCellHeading">Main:
								</span>
<ul>
<li>
<a href="./../../process.openup.base/capabilitypatterns/developer_A9B88A4E.html" guid="_frYNQNOKEdyqlogshP8l4g">Developer</a>
</li>
</ul>
</td><td class="sectionTableCell" width="30%"><span class="sectionTableCellHeading">Additional:
								</span>
<ul>
<li>
<a href="./../../process.openup.base/capabilitypatterns/stakeholder_BC95439.html" guid="_frYNQ9OKEdyqlogshP8l4g">Stakeholder</a>
</li>
<li>
<a href="./../../process.openup.base/capabilitypatterns/tester_6E4A6C6D.html" guid="_frYNRNOKEdyqlogshP8l4g">Tester</a>
</li>
</ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">Assisting:
								</span></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Inputs</th><td class="sectionTableCell" width="30%"><span class="sectionTableCellHeading">Mandatory:
								</span>
<ul>
<li>
<a href="./../../process.openup.base/capabilitypatterns/software_design_slot_D1C3FAF5.html" guid="_gX7xQdOKEdyqlogshP8l4g">[Software Design]</a>
</li>
<li>
<a href="./../../process.openup.base/capabilitypatterns/technical_specification_slot_A7D69414.html" guid="_frh-QdOKEdyqlogshP8l4g">[Technical Specification]</a>
</li>
</ul>
</td><td class="sectionTableCell" width="30%"><span class="sectionTableCellHeading">Optional:
								</span>
<ul>
<li>
<a href="./../../process.openup.base/capabilitypatterns/software_implementation_slot_E32AE6DF.html" guid="_gX7xQNOKEdyqlogshP8l4g">[Software Implementation]</a>
</li>
<li>
<a href="./../../process.openup.base/capabilitypatterns/developer_test_DC61DB05.html" guid="_gX7xQtOKEdyqlogshP8l4g">DeveloperTest</a>
</li>
</ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">External:
								</span>
<ul>
<li>None</li>
</ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Outputs</th><td class="sectionTableCell" colspan="3">
<ul>
<li>
<a href="./../../process.openup.base/capabilitypatterns/implementation_1DA9E76A.html" guid="_dC4w4JojEd2XAqcHTC2Siw">Implementation</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    Usually, this task is focused on a specific implementation&nbsp;element, such as a class or component, but it does not
    need to be.
</p>
<p>
    A portion of the design is implemented by performing this task. This task can be performed any number of times during
    an iteration. In fact it is best to do this task in as small a scope as possible to tighten the loop between it and
    related tasks involving developer testing and consideration of the design.
</p></td>
</tr>
</table>
</div>
<div class="sectionHeading">Steps</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="sectionTableCell">
<div class="stepHeading">Determine a strategy</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Determine a strategy based on the software design and developer tests&nbsp;for how you are going to implement the
    solution. The fundamental options are:
</p>
<ol>
    <li>
        Apply existing, reusable assets.
    </li>
    <li>
        Model the design in detail and generate the source code (by model transformation).
    </li>
    <li>
        Write the source code.
    </li>
    <li>
        Any combination of the above.
    </li>
</ol></td>
</tr>
</table>
</div>
<div class="stepHeading">Identify opportunities for reuse</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Identify existing code or other implementation elements that can be reused in the portion of the implementation that
    you are creating or changing. A comprehensive understanding of the overall design is helpful, because it is best to
    leverage reuse opportunities when you have a thorough understanding of the proposed solution.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Transform design into implementation</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    If you are using sophisticated modeling tools, you should be able to generate a portion of the required source code
    from the model. Note that programming is&nbsp;commonly required to complete the implementation after the design model
    has been transformed into code.
</p>
<p>
    Even without tools, there is&nbsp;typically some amount of code that can be created by rote by examining the design and
    developer tests.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Write source code</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Write the source code to make the implementation conform to the design and expected behavior. You should strive to
    reuse and/or generate code wherever possible, but you will still need to do some programming. To do so, consider the
    following:
</p>
<ul>
    <li>
        Examine the technical requirements. Because some requirement information does not translate directly into your
        design you should examine the requirement(s) to ensure that they are fully realized in the implementation.
    </li>
    <li>
        Refactor your code to improve its design. Refactoring is a technique where you improve the quality of your code via
        small, safe changes.
    </li>
    <li>
        Tune the results of the existing implementation by improving performance, the user interface, security, and other
        nonfunctional areas.
    </li>
    <li>
        Add missing details, such as completing the logic of operations or adding supporting classes and data structures
    </li>
    <li>
        Handle boundary conditions.
    </li>
    <li>
        Deal with unusual circumstances or error states.
    </li>
    <li>
        Restrict behavior (preventing users or client code from executing illegal flows, scenarios, or combinations of
        options).
    </li>
    <li>
        Add critical sections for multi-threaded or re-entrant code.
    </li>
</ul>
<p>
    Though many different considerations are listed here, there is one clear way to know when the source code is done. The
    solution has been implemented when it passes the developer tests. Any other considerations can be taken care of in a
    refactoring pass over the code to improve it once it is complete and correct.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Evaluate the implementation</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Verify that the implementation is fit for its purpose. Examine the code for its suitability to perform its intended
    function. This is a quality assurance step that you perform in addition to testing which is described in other tasks.
    Consider these strategies:
</p>
<ul>
    <li>
        Pair programming. By pairing to implement the code in the first place, you effectively evaluate the code as its
        being written.
    </li>
    <li>
        Read through the code for common mistakes. Consider keeping a checklist of common mistakes that you make, as a
        reminder reference.
    </li>
    <li>
        Use tools to check for implementation errors and inappropriate code. For example, use a static code rule checker or
        set the compiler to the most detailed warning level.
    </li>
    <li>
        Use tools that can visualize the code. Code visualization, such as the UML visualizations in the Eclipse IDE, help
        developers identify issues such as excessive coupling or circular dependencies.
    </li>
    <li>
        Perform informal, targeted code inspections. Ask colleagues to review small critical sections of code and code with
        significant churn. Avoid reviewing large sections of code.
    </li>
    <li>
        Use&nbsp;a tester to ensure the implementation is testable and understandable to testing resources.
    </li>
</ul>
<p>
    Improve the implementation based on the results of these evaluations.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Communicate significant decisions</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Communicate the impact of unexpected changes to the design and requirements.
</p>
<p>
    The issues and constraints that you uncover when you implement the system must be communicated to the team. The impact
    of issues discovered during implementation must be incorporated into future decisions. If appropriate, use&nbsp; the
    change management process to reflect ambiguities that you identified and resolved in the implementation so they can be
    tested and you can manage&nbsp;stakeholder expectations appropriately. Similarly,&nbsp;leverage the design process to
    update the design to reflect new constraints and issues uncovered during implementation to be sure that the new
    information is communicated to other developers.
</p>
<p>
    Usually, there is no need for a change request if the required change is small and the same person is designing and
    implementing the code element. That individual can make the design change directly. If the required change has a broad
    impact, it may be necessary to communicate that change to the other team members through a change request.
</p></td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Properties</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Multiple Occurrences" abbr="Multiple Occurrences">Multiple Occurrences</th><td class="sectionTableCell" align="left" headers="property_Multiple Occurrences"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Event Driven" abbr="Event Driven">Event Driven</th><td class="sectionTableCell" align="left" headers="property_Event Driven"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Ongoing" abbr="Ongoing">Ongoing</th><td class="sectionTableCell" align="left" headers="property_Ongoing"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Optional" abbr="Optional">Optional</th><td class="sectionTableCell" align="left" headers="property_Optional"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Planned" abbr="Planned">Planned</th><td class="sectionTableCell" align="left" headers="property_Planned"><img width="20" height="15" alt="Yes" title="Yes" src="./../../images/true.gif"></td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row" id="property_Repeatable" abbr="Repeatable">Repeatable</th><td class="sectionTableCell" align="left" headers="property_Repeatable"><img width="20" height="15" alt="" title="" src="./../../images/indent.gif"></td>
</tr>
</table>
</div>
<div class="sectionHeading">Key Considerations</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    It is best when developer tests already exist so there is an unambiguous definition of what behavior is considered
    correct. The implementation should be immediately tested.
</p>The <a class="elementLink" href="./../../core.mgmt.slot.base/workproducts/project_work_slot_F12BAC46.html" guid="_1QZI8EfUEdyiPI8btkmvmw">[Project Work]</a>&nbsp; is implicitly used in implementation tasks to manage which
requirements or change requests are being realized in the code.<br /></td>
</tr>
</table>
</div>
<div class="sectionHeading">More Information</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Concepts</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/refactoring_1B63BA3B.html" guid="_Poc7IPDzEdqYgerqi84oCA">Refactoring</a>
</li>
</ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Guidelines</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/guidelines/mapping_design_to_code_FA4B08DA.html" guid="_mlKb8JyJEdy9brKHb521mQ">Mapping from Design to Code</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright"><p> This program and the accompanying materials are made available under the<br />
  <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse 
  Public License V1.0</a>, which accompanies this distribution. </p><p/><p> <a class="elementLink" href="./../../core.default.release_copyright.base/guidances/supportingmaterials/openup_copyright_C3031062.html" guid="_UaGfECcTEduSX6N2jUafGA">OpenUP Copyright</a></p></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script language="JavaScript" type="text/javascript">
					contentPage.onload();
					contentPage.processPage.fixDescriptorLinks();
				</script>
</html>
